/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ifconnect.model.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;

/**
 *
 * @author Genemes
 */
@Entity
public class Usuario implements Serializable{

    private static final long serialVersionUID = 1L;
    @Id
    @SequenceGenerator(name = "Usuario_ID", sequenceName = "Usuario_SEQUENCE", allocationSize = 1, initialValue = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Usuario_ID")
    private Long id;
    private String nome;
    private String sobrenome;
    private String sexo;
    private String matricula;
    private String email;
    private String foto;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataNascimento;
    private String senha;
    private String tipo;
    private String status;
    
    @OneToMany(mappedBy="usuario", cascade= CascadeType.ALL)
    private Collection<Postagem> postagens = new ArrayList<Postagem>();

    @ManyToMany(mappedBy="alunos", cascade= CascadeType.ALL) 
    private Collection<Disciplina> disciplinas = new ArrayList<Disciplina>();

    @ManyToOne
    private Turma turma;
    
    public Usuario() {}

    public Usuario(String nome, String sobrenome, String sexo, String matricula, String email, Date dataNascimento, String senha, String tipo, String status, Turma turma) {
        this.nome = nome;
        this.sobrenome = sobrenome;
        this.sexo = sexo;
        this.matricula = matricula;
        this.email = email;
        this.dataNascimento = dataNascimento;
        this.senha = senha;
        this.tipo = tipo;
        this.status = status;
        this.turma = turma;
//        Falta setar a foto
    }

    
    public boolean addDisciplinas(Disciplina disciplina){
        return this.disciplinas.add(disciplina);
    }

    public void removeDisciplinas(Disciplina disciplina) {
        this.disciplinas.remove(disciplina);
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public Collection<Disciplina> getDisciplinas() {
        return disciplinas;
    }

    public void setDisciplinas(Collection<Disciplina> disciplinas) {
        this.disciplinas = disciplinas;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getMatricula() {
        return matricula;
    }

    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSobrenome() {
        return sobrenome;
    }

    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public Turma getTurma() {
        return turma;
    }

    public void setTurma(Turma turma) {
        this.turma = turma;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public Collection<Postagem> getPostagens() {
        return postagens;
    }
    
    public void setPostagens(Collection<Postagem> postagens) {
        this.postagens = postagens;
    }
    
     public boolean addPostagens(Postagem postagem){
        return this.postagens.add(postagem);
    }

    public void removePostagem(Postagem postagem) {
        this.postagens.remove(postagem);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Usuario other = (Usuario) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if ((this.nome == null) ? (other.nome != null) : !this.nome.equals(other.nome)) {
            return false;
        }
        if ((this.sobrenome == null) ? (other.sobrenome != null) : !this.sobrenome.equals(other.sobrenome)) {
            return false;
        }
        if ((this.sexo == null) ? (other.sexo != null) : !this.sexo.equals(other.sexo)) {
            return false;
        }
        if ((this.matricula == null) ? (other.matricula != null) : !this.matricula.equals(other.matricula)) {
            return false;
        }
        if ((this.email == null) ? (other.email != null) : !this.email.equals(other.email)) {
            return false;
        }
        if ((this.foto == null) ? (other.foto != null) : !this.foto.equals(other.foto)) {
            return false;
        }
        if (this.dataNascimento != other.dataNascimento && (this.dataNascimento == null || !this.dataNascimento.equals(other.dataNascimento))) {
            return false;
        }
        if ((this.senha == null) ? (other.senha != null) : !this.senha.equals(other.senha)) {
            return false;
        }
        if ((this.tipo == null) ? (other.tipo != null) : !this.tipo.equals(other.tipo)) {
            return false;
        }
        if ((this.status == null) ? (other.status != null) : !this.status.equals(other.status)) {
            return false;
        }
        if (this.postagens != other.postagens && (this.postagens == null || !this.postagens.equals(other.postagens))) {
            return false;
        }
        if (this.disciplinas != other.disciplinas && (this.disciplinas == null || !this.disciplinas.equals(other.disciplinas))) {
            return false;
        }
        if (this.turma != other.turma && (this.turma == null || !this.turma.equals(other.turma))) {
            return false;
        }
        return true;
    }
    

}
